package com.taotao.common.utils;

import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * 各种id生成策略
 * <p>Title: IDUtils</p>
 * <p>Description: </p>
 * <p>Company: www.itcast.com</p> 
 * @author	
 * @date	2015年7月22日下午2:32:10
 * @version 1.0
 */
public class IDUtils {

	/**
	 * 图片名生成
	 */
	public synchronized static String getImageName() {
		//取当前时间的长整形值包含毫秒
		long millis = System.currentTimeMillis();
		//加上三位随机数
		Random random = new Random();
		int end3 = random.nextInt(999);
		//如果不足三位前面补0
		String str = millis + String.format("%03d", end3);
		
		return str;
	}
	/**
	 * string型时间id生成
	 */
	public synchronized static String getId() {
		return String.valueOf(getItemId());
	}
	
	 /** 
     * 获得一个UUID 
     * @return String UUID 
     */ 
    public static String getUUID(){ 
        String s = UUID.randomUUID().toString(); 
        //去掉“-”符号 
        return s.substring(0,8)+s.substring(9,13)+s.substring(14,18)+s.substring(19,23)+s.substring(24); 
    } 
    /** 
     * 获得指定数目的UUID 
     * @param number int 需要获得的UUID数量 
     * @return String[] UUID数组 
     */ 
    public static String[] getUUID(int number){ 
        if(number < 1){ 
            return null; 
        } 
        String[] ss = new String[number]; 
        for(int i=0;i<number;i++){ 
            ss[i] = getUUID(); 
        } 
        return ss; 
    } 
	
	/**
	 * Long型时间id生成
	 */
	public synchronized static long getItemId() {
		//取当前时间的长整形值包含毫秒
		long millis = System.currentTimeMillis();
		//加上三位随机数
		Random random = new Random();
		int end3 = random.nextInt(999);
		//如果不足三位前面补0
		String str = millis + String.format("%03d", end3);
		long id = new Long(str);
		return id;
	}
	
	/**
	 * 日期时间id生成(精确到毫秒+两位随机数)
	 */
	public synchronized static long getOrderId() {
		//取当前时间的长整形值包含毫秒
		String millis = DateUtils.fmtDateToStr(new Date(),DateUtils.DATE_KEY2_STR);
		//加上两位随机数
		Random random = new Random();
		int end2 = random.nextInt(99);
		//如果不足两位前面补0
		String str = millis + String.format("%02d", end2);
		long id = new Long(str);
		return id;
	}
	
	public static void main(String[] args) {
		
		System.out.println(getYearId().length());
		System.out.println(getYearId());
	}
	
	/**
	 * 生成id(年+时间搓+3位随机数) 列子(16+1474858433227+344)= 161474858433227344
	 */
	public static String getYearId(){
		
		Calendar c = Calendar.getInstance();
		int i = c.get(Calendar.YEAR);
		String j = i+"";
		String year = j.substring(2,4);
		return year+getId();
	}
}
